#ifndef _KEY_MANAGER_H_
#define _KEY_MANAGER_H_

#include "./SYSTEM/SYS/sys.h"
#include "./BSP/KEY/cot_key.h"

/* -------------------------------------------- 按键引脚定义 -------------------------------------------- */

#define KEY0_GPIO_PORT              GPIOB
#define KEY0_GPIO_PIN               GPIO_PIN_11
#define KEY0_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)         /* PB口时钟使能 */

#define KEY1_GPIO_PORT              GPIOB
#define KEY1_GPIO_PIN               GPIO_PIN_1
#define KEY1_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOB_CLK_ENABLE(); }while(0)         /* PB口时钟使能 */

#define KEY2_GPIO_PORT              GPIOA
#define KEY2_GPIO_PIN               GPIO_PIN_6
#define KEY2_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)         /* PA口时钟使能 */

/* -------------------------------------------- 按键状态定义 -------------------------------------------- */

/* 按键GPIO读取宏定义 */
#define GPIO_GET_KEY0()      !HAL_GPIO_ReadPin(KEY0_GPIO_PORT, KEY0_GPIO_PIN)           /* 读取KEY0状态 */
#define GPIO_GET_KEY1()      !HAL_GPIO_ReadPin(KEY1_GPIO_PORT, KEY1_GPIO_PIN)           /* 读取KEY1状态 */
#define GPIO_GET_KEY2()      !HAL_GPIO_ReadPin(KEY2_GPIO_PORT, KEY2_GPIO_PIN)           /* 读取KEY2状态 */

/* -------------------------------------------- 按键ID定义 -------------------------------------------- */

typedef enum
{
    KEY0 = 0,       /* 按键0 */
    KEY1,           /* 按键1 */
    KEY2,           /* 按键2 */
    
    KEY_MAX_NUM     /* 按键总数 */
} KEY_ID;

/* -------------------------------------------- 函数声明 ---------------------------------------------- */

void FML_KEY_Init(void);    /* 按键初始化 */

#endif
